package br.edu.ufc.deti.doodlematricula.comandos;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.StringTokenizer;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.edu.ufc.deti.doodlematricula.beans.DiaDisciplina;
import br.edu.ufc.deti.doodlematricula.beans.Disciplina;
import br.edu.ufc.deti.doodlematricula.beans.Horario;
import br.edu.ufc.deti.doodlematricula.beans.Usuario;
import br.edu.ufc.deti.doodlematricula.controler.Comando;
import br.edu.ufc.deti.doodlematricula.negocio.NgcDisciplina;

public class CmdSalvaSolicitacao implements Comando {
	  private String proximo;

	  public CmdSalvaSolicitacao(String proximo) {
	    this.proximo = proximo;
	  }

	@SuppressWarnings("unchecked")
	public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
	    HttpSession sessao = request.getSession( true );
    	Usuario usuario = (Usuario) sessao.getAttribute("usuario");
    	Disciplina disciplina = (Disciplina) sessao.getAttribute("disciplina");
    	ArrayList<Disciplina> disciplinas = (ArrayList<Disciplina>) sessao.getAttribute("disciplinas");
    	ArrayList<DiaDisciplina> solicitacao = requestToDiaDisciplina(request);
		LinkedHashMap<String, LinkedHashSet<Usuario>> solicitacoesDisciplinas = 
    		NgcDisciplina.getInstancia().setSolicitacoesDisciplina( usuario.getIdUsuario(), disciplina.getIdDisciplina(), solicitacao );

    	String html_solicitacoes_disciplinas = composeHTMLRelatorioSolicitacoesDisciplina( usuario, disciplina, solicitacoesDisciplinas );
    	
    	sessao.setAttribute("usuario", usuario);
    	sessao.setAttribute("disciplinas", disciplinas); 
    	sessao.setAttribute("html_relatorio_solicitacoes", html_solicitacoes_disciplinas);
		return proximo;
	}

	public String composeHTMLRelatorioSolicitacoesDisciplina( Usuario usuario, Disciplina disciplina, 
			LinkedHashMap<String, LinkedHashSet<Usuario>> solicitacoesDisciplinas ) throws Exception {

		String relatorioSolicitacoes = "";
		
		for (Iterator<String> it = solicitacoesDisciplinas.keySet().iterator(); it.hasNext();) {
			String diaDisciplina = (String)it.next();

			relatorioSolicitacoes += 
					"  <tr bgcolor='Silver'> "+
					"    <th>"+diaDisciplina+"</th> "+
					"  </tr> ";

			LinkedHashSet<Usuario> value = solicitacoesDisciplinas.get(diaDisciplina);
			for (Usuario usuario2 : value) {
				relatorioSolicitacoes += 
					"  <tr> "+
					"    <td>"+usuario2.getNome()+"</td> "+
					"  </tr> ";
			}
		}
		return relatorioSolicitacoes;
	}
	
	
	private ArrayList<DiaDisciplina> requestToDiaDisciplina( HttpServletRequest request ) {
		String selecionados = request.getParameter("selecionados");
		StringTokenizer st = new StringTokenizer(selecionados, ",,", false);
		ArrayList<String> al = new ArrayList<String>();
		al.add(st.nextToken());
		while (st.hasMoreTokens()) {
			al.add(st.nextToken());
		}
		ArrayList<DiaDisciplina> solicitacao = new ArrayList<DiaDisciplina>();
		DiaDisciplina dia = null; Horario horario = null;
		for (String string : al) {
			dia = new DiaDisciplina();
			horario = new Horario();
			dia.setHorario(horario);
			dia.setCodDiaDisciplina(string.substring(0, 1));
			dia.getHorario().setCodHorario(string.substring(2, 3));
			solicitacao.add(dia);
			dia = null;
		}
		return solicitacao;
	}
}
